# -*- coding:utf-8 -*-

# @Time    : 2023/10/8 15:12
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @File    : plan_explain.py
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
from bot.insurance_planner_gpt.agent.base_agent import LLMAgent
import asyncio

default_template = """
作为一个最专业规划师的解决方案说明agent,你需要基于从用户目标出发的方案进行全面客观的优劣对比，针对方案中的保险产品向用户讲解清楚。
需要注意以下情况：
1、你只是基于方案里的内容进行对比分析及解释，不要无中生，也不用推荐新的方案
2、回复的内容必须全部用中文回复，不要出现英文或者其他语言
3、对比分析方案时必须结合用户情景和背景知识
4、回复的内容只用包含对比分析的结果，不要包含其他无关内容，回复内容需要针对用户需求且简明扼要
5、讲解方案不要拿用户举例，例如不能说'如果您发生意外/身故'，而是要说'如果被保险人发生意外/身故'
6、所有保险知识都必须来源于解决方案和方案背景知识，不要自己添加任何保险知识  

{conversation_history}

{solution_plan_causals}

{background_knowledge}

基于当前给出方案的详细对比及解释说明：
"""


class PlanDescription(LLMAgent):

    def __init__(self, background_knowledge, solution_plan_causals, conversation_history):

        if solution_plan_causals:
            self.solution_plan_causals = "解决方案如下：\n===\n" + "\n".join(solution_plan_causals) + "\n===\n"
        else:
            self.solution_plan_causals = ""

        if background_knowledge:
            self.background_knowledge = "方案背景知识：\n===\n" + str(background_knowledge) + "\n===\n"
        else:
            self.background_knowledge = ""

        if conversation_history:
            self.conversation_history = "对话上下文信息：\n===\n" + str(conversation_history) + "\n===\n"
        else:
            self.conversation_history = ""


        self.prompt = default_template.format(background_knowledge=self.background_knowledge,
                                              solution_plan_causals=self.solution_plan_causals, conversation_history=self.conversation_history)
        super().__init__(self.prompt)


if __name__ == "__main__":
    user_question = "先解决医疗的问题，然后最好费用越少越好"
    user_info = {'年龄': 25, '是否已结婚': '否', '月收入': 10000}
    solution_plan_causals = """
承保年龄：满28天-70周岁
保障期限：1年
保证续保：20年
家庭单优惠：2人费率优惠5%、3人费率优惠10%、4人及以上费率优惠15% 共享1万免赔额

保障责任：
年度给付限额：400万元
年度免赔额1万元（一般医疗保险金、特定疾病医疗保险金及重大疾病医疗保险金三项责任共用，其他保险责任不适用）。院外恶性肿瘤特定药品费用医疗保险金（可选保障）无免赔额。
一般医疗保险金、特定疾病医疗保险金、重大疾病医疗保险金及院外恶性肿瘤特定药品费用医疗保险金（可选保障），年度赔付限额400万元。

保证续保期间内总赔付限额：800万元
一般医疗保险金、特定疾病医疗保险金、重大疾病医疗保险金及院外恶性肿瘤特定药品费用医疗保险金（可选保障），保证续保期间赔付限额800万元。

一般医疗保险金：200万元
等待期90天。年限额200万元。一般情况下，赔付比例为100%，但若被保险人在投保时选择以有基本医疗保险或公费医疗身份投保，但在就诊时未按基本医疗保险或公费医疗有关规定取得医疗费用补偿，则赔付比例为60%。保险责任包含：
1.住院医疗保险金；
2.指定门诊急诊医疗保险金；
3.住院前后门诊急诊医疗保险金（前后各30天）。

55种特定疾病医疗保险金：200万元
等待期90天。年限额200万元。一般情况下，赔付比例为100%，但若被保险人在投保时选择以有基本医疗保险或公费医疗身份投保，但在就诊时未按基本医疗保险或公费医疗有关规定取得医疗费用补偿，则赔付比例为60%。保险责任包含：
1.特定疾病住院医疗保险金；
2.特定疾病指定门诊急诊医疗保险金；
3.特定疾病住院前后门诊急诊医疗保险金（前后各30天）。

120种重大疾病医疗保险金:400万元
等待期90天。年限额400万元。一般情况下，赔付比例为100%，但若被保险人在投保时选择以有基本医疗保险或公费医疗身份投保，但在就诊时未按基本医疗保险或公费医疗有关规定取得医疗费用补偿，则赔付比例为60%。其中质子重离子医疗保险金赔付比例为100%。保险责任包含：
1.重大疾病住院医疗保险金；
2.重大疾病指定门诊急诊医疗保险金；
3.重大疾病住院前后门诊急诊医疗保险金（前后各30天）；
4.质子重离子医疗保险金。

120种重大疾病关爱保险金1万元
保额1万元，保证续保期间内限给付一次。
"""
    conversation_history = """
用户:先解决医疗的问题，然后最好费用越少越好，我不清楚保费预算是多少
    """


    plan_explain = PlanDescription(
                               background_knowledge=None,
                               solution_plan_causals=solution_plan_causals, conversation_history=conversation_history,)
    result = asyncio.run(plan_explain.achat_auto_llm(type="gpt"))
    print(result)
